package com.song.rabbitmq.springbootorderrabbitmqproducerttl.config;


import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;

/**
 * ttl 过期时间，过期的消息移除到 死信队列（接盘侠）
 *
 * 比如：付款超过设定时间
 */

@Configuration
public class TTLRabbitConfig {

    // 创建交换机
    @Bean
    DirectExchange orderExchange() {
        return new DirectExchange("ttl_order_exchange");
    }


    // 创建队列
    @Bean
    public Queue ttlQueue() {
        HashMap<String, Object> args = new HashMap<>();
        // 修改队列参数后，需要删除原队列，重新建队列，否则会报错
        args.put("x-message-ttl", 10000); // 设置过期时间   10s后过期
        args.put("x-dead-letter-exchange", "dead_direct_exchange"); // // 死信交换机
        args.put("x-dead-letter-routing-key", "dead"); // // 死信交换机
        return new Queue("ttl.order.new.queue", true, false,false, args);
    }


    // 绑定队列到交换机，并设置相应的routing key，来控制哪部分队列应该接收到消息
    @Bean
    public Binding bindingDirect3() {
        return BindingBuilder.bind(ttlQueue()).to(orderExchange()).with("");
    }


}
